<!DOCTYPE HTML>
<style>
.int {
    tab-size: calc(2 * 4);
}
.int-non-neg-clamp {
    tab-size: 12345;
    tab-size: calc(2 * -4);
}
.float {
    opacity: calc(2 / 4);
}
.float-round {
    position: absolute;
    z-index: 12345;
    z-index: calc(2 / 4);
}
.px-invalid {
    opacity: 0.9;
    opacity: calc((2 / 4) * 1px);
}
.num-length-invalid {
    tab-size: 12345;
    tab-size: calc(1 + 1px);
    tab-size: calc(1 + 100%);
    tab-size: calc(100%);
    tab-size: calc(10px) bla;
    tab-size: calc(bla) 10px;
}
.px-valid {
    tab-size: calc(10px);
}
</style>
<div class="default int"></div>
<div class="default int-non-neg-clamp"></div>
<div class="default float"></div>
<div class="default float-round"></div>
<div class="default px-invalid"></div>
<div class="default num-length-invalid"></div>
<div class="default px-valid"></div>
<script src="../../resources/js-test.js"></script>
<script>
if (window.testRunner)
    testRunner.dumpAsText();

function getComputedValue(selector, property) {
    return getComputedStyle(document.querySelector(selector))[property];
}

shouldBe('getComputedValue(".int", "tabSize")', '"8"');
shouldBe('getComputedValue(".int-non-neg-clamp", "tabSize")', '"0"');
shouldBeCloseTo('Number(getComputedValue(".float", "opacity"))', 0.5, .0001);
shouldBe('getComputedValue(".float-round", "zIndex")', '"1"');
shouldBeCloseTo('Number(getComputedValue(".px-invalid", "opacity"))', 0.9, .0001);
shouldBe('getComputedValue(".num-length-invalid", "tabSize")', '"12345"');
shouldBe('getComputedValue(".px-valid", "tabSize")', '"10px"');
</script>
